package soporte;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import utn.frc.tsb.utils.ValerioFritelli.HashTable.HashTable;

/**
 * @project DLC Final / UTN FRC 2013
 * @date Febrero de 2013
 *
 * @author Gonzalo Arribere
 * @author Gustavo Morales
 * @author Pablo Moreno
 *
 * Esta clase implementa el patron Singleton para devolver una lista de terminos
 * que representan las stop words del alfabeto español.
 */
public class StopWords {

    private static String STOPWORDS_FILE_NAME = "D:\\Mis documentos\\NetBeansProjects\\utn-dlc-final-2013\\trunk\\DLC-Modelo-Vectorial\\settings\\dbsettings.inf";
    //Instancia a devolver.
    private static StopWords INSTANCE = new StopWords();
    //Tabla hash que contiene a las stop words.
    private HashTable stopWords;

    // El constructor privado no permite que se genere un constructor por defecto
    // (con mismo modificador de acceso que la definicion de la clase)
    private StopWords() {
        stopWords = new HashTable(500);
        cargarTabla();
    }

    /**
     * Determina si un termino es o no una stop word.
     *
     * @param pWord palabra a analizar.
     * @return booleano que sera true en caso de ser una stop word y false en
     * caso contrario.
     */
    public static boolean isStopWord(String pWord) {
        return INSTANCE.existsStopWord(pWord);
    }

    private boolean existsStopWord(String pWord) {
        return stopWords.contains(pWord);
    }

    /**
     * Carga la tabla hash con las stop words.
     */
    private void cargarTabla() {
        String word;
        BufferedReader buffer;

        try {
            buffer = new BufferedReader(new FileReader(STOPWORDS_FILE_NAME));

            while ((word = buffer.readLine()) != null) {
                word = WordCleaner.clean(word);
                if (word.length() > 0 && !stopWords.contains(word)) {
                    stopWords.put(word);
                }
            }
            buffer.close();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(StopWords.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(StopWords.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String args[]) {
        System.out.println(WordCleaner.clean("niño"));
        System.out.println(isStopWord(WordCleaner.clean("niño")));
    }
}